草庐IT

Java Swingworker 和多线程

全部标签

c++ - 如何在多线程 C++ 中实现 "soft barrier"

我有一些具有以下结构的多线程C++代码:do_thread_specific_work();update_shared_variables();//checkpointAdo_thread_specific_work_not_modifying_shared_variables();//checkpointBdo_thread_specific_work_requiring_all_threads_have_updated_shared_variables();如果所有线程都只到达检查点A,检查点B之后的工作本可以开始,因此我提出了“软屏障”的概念。通常,多线程库只提供“硬屏障”,其中

C++ 为多线程适配一个库

我正在使用libconfig++和线程制作一个小型服务器应用程序。关键是,libconfig++isnotthreadsafe,所以我的想法是创建另一个类,它充当带有Mutex的包装器,如下所示:classapp_config{public:app_config();/*Herebemyproblems.*/voidset();voidget();virtual~app_config();private:Configcfg;boost::mutex*cfg_mutex;};现在,这一切都很好,直到我意识到libconfigsupportsplentyoftypes为其变量。那时我们的主

线程拼图中的c++ 11仿函数

请考虑以下代码片段。使用GCC4.6.1,x变为0,y变为1。为什么使用和不使用单独的线程会得到不同的结果?我应该如何修改代码以使两个版本产生相同的结果(即整数值递增1?)谢谢。structfunctor{voidoperator()(int&x){++x;}};voidtfunc(functor&f,int&x){f(x);}intmain(){functorf;intx=0,y=0;std::threadt=std::thread(tfunc,f,x);t.join();std::cout 最佳答案 很容易看出发生了什么。只需替

c++ - 具有 PPL 和并行内存分配的线程 ID

我有一个关于MicrosoftPPL库和一般并行编程的问题。我正在使用FFTW执行大量(100,000)64x64x64FFT和逆FFT。在我当前的实现中,我使用并行for循环并在循环内分配存储数组。我注意到在这些情况下,我的CPU使用率最高仅达到60-70%。(请注意,这仍然比我测试过的FFTW提供的内置线程FFT更好用)。由于我使用的是fftw_malloc,是否可能发生过度锁定而阻止完全使用?鉴于此,在主处理循环之前为每个线程预分配存储数组是否可取,这样循环本身就不需要锁?如果是这样,MSFTPPL库怎么可能呢?我以前一直在使用OpenMP,在这种情况下,使用提供的函数获取线程I

c++ - Valgrind 挂起以分析多线程程序

我有一个在多核机器上运行的多线程程序(在Linux平台上使用Pthreads在C中实现)。我使用带有--memcheck选项的ValGrind来查找我的代码中存在的一些内存问题。但它挂起。为了完整地概述问题,这里是背景。代码在开始时有一些顺序部分作为初始化的一部分,随后它创建了8个线程(使用PthreadAPI)和梯级以完成。一段时间后,我的代码转储“核心”。我使用了GDB,它给出了以下跟踪。=======Backtrace:=========/lib/tls/i686/cmov/libc.so.6[0xb7cd47cd]/lib/tls/i686/cmov/libc.so.6(cfr

c++ - 如何使用非托管 EasyHook 从进程中的任何线程 Hook 方法?

我在使方法Hook正常工作时遇到了一些问题。如果“我”调用被Hook的方法,我就可以让Hook工作。但是当它在进程运行期间自然发生时,它不会被钩住。我的问题可能源于这样一个事实,即我实际上是在我自己生成的线程中设置这些Hook。显然LhSetInclusiveACL()方法需要知道您要Hook的线程。好吧,这是我的问题...我真的不在乎哪些线程应用了钩子(Hook),我希望它们都被钩住。例如,假设我希望“gdi32.dll”库中的CreateICW()方法与整个进程“iexplorer.exe”Hook。不仅仅是来自线程ID号48291或其他。了解哪些线程将调用您感兴趣的Hook例程需

【QT专栏】QT中实现多线程的四种方式和线程同步

目录一、继承QThread1.基本概念2.操作流程二、继承QObject(推荐)1.基本概念2.操作流程三、继承QRunnable,配合QThreadPool实现多线程1.外界通信2.QMetaObject::invokeMethod()介绍3.QMetaObject::invokeMethod()使用方式四、使用QtConcurrent::run()1.基本概念2.操作流程3.实现案例五,线程同步1.低级同步原语2.高级事件队列一、继承QThread1.基本概念一个QThread类的对象管理一个子线程,自定义一个类继承自QThread,并重写虚函数run(),在run()函数里实现线程需要完

c++ - 线程本地存储 (TLS) 和 OpenMP

OpenMP(例如IntelC++12实现)目前如何处理在Linux中使用__thread和在Windows中使用__declspec(thread)声明的TLS变量?它会使它们成为线程私有(private)的还是只是忽略TLS?找到一篇相关论文,还是一头雾水。http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1639501&tag=1 最佳答案 根据我的经验,__thread用于在许多编译器(VC、gcc、icc)中实现OpenMPthreadprivate(MSDN上的th

c++ - 线程安全传递运算符

我正在为我们的堆内存管理器覆盖new()和new[]()运算符。new()有一个mutex并且是线程安全的,但我没有向new[]()添加互斥锁,它的作用是传递运算符,因为我怀疑调用时它会在堆栈上。new[]()将在堆栈上并且不需要自己的互斥量是否正确?/*!\briefOverridetheStandardC++new[]operator\paramsize[in]Numberofbytestoallocate\exceptionstd::bad_alloc\returnsPointertothestartoftheallcoatedmemoryblockof\csizebytes\t

c++ - 在 C++ 中,如何使用多个线程读取一个文件?

我正在Windows7、64位、8核中使用VS2012从本地硬盘读取.csv文件。我正在读取的文件有50,000多行,每行有200多个属性,因此读取数据并将它们提供给相应的变量非常耗时。因此,我想知道是否可以使用多线程来加快速度,即每个线程读取文件的一部分。我在谷歌上搜索了一下,发现有人说,由于硬盘驱动器不是多线程的,因此使用多线程这样做实际上会减慢速度。这是真的吗?如果可以用多线程读取一个文件,谁能给我一个我可以学习的例子?此外,是否可以明确地将线程或任务分配给CPU核心?最后一个问题:我用Python读取了同一个文件,几秒钟后就完成了。我可以知道为什么Python的读取速度比C++